'use strict';
var __assign =
    (this && this.__assign) ||
    function () {
        __assign =
            Object.assign ||
            function (t) {
                for (var s, i = 1, n = arguments.length; i < n; i++) {
                    s = arguments[i];
                    for (var p in s)
                        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
                }
                return t;
            };
        return __assign.apply(this, arguments);
    };
Object.defineProperty(exports, '__esModule', {value: true});
var utils_1 = require('../common/utils');
var component_1 = require('../common/component');
var props_1 = require('./props');
component_1.VantComponent({
    field: true,
    classes: ['input-class', 'right-icon-class', 'label-class'],
    props: __assign(
        __assign(
            __assign(__assign({}, props_1.commonProps), props_1.inputProps),
            props_1.textareaProps
        ),
        {
            size: String,
            icon: String,
            label: String,
            error: Boolean,
            center: Boolean,
            isLink: Boolean,
            leftIcon: String,
            rightIcon: String,
            autosize: null,
            required: Boolean,
            iconClass: String,
            clickable: Boolean,
            inputAlign: String,
            customStyle: String,
            errorMessage: String,
            arrowDirection: String,
            showWordLimit: Boolean,
            errorMessageAlign: String,
            readonly: {
                type: Boolean,
                observer: 'setShowClear',
            },
            clearable: {
                type: Boolean,
                observer: 'setShowClear',
            },
            border: {
                type: Boolean,
                value: true,
            },
            titleWidth: {
                type: String,
                value: '6.2em',
            },
        }
    ),
    data: {
        focused: false,
        innerValue: '',
        showClear: false,
    },
    created: function () {
        this.value = this.data.value;
        this.setData({innerValue: this.value});
    },
    methods: {
        onInput: function (event) {
            var _a = (event.detail || {}).value,
                value = _a === void 0 ? '' : _a;
            this.value = value;
            this.setShowClear();
            this.emitChange();
        },
        onFocus: function (event) {
            this.focused = true;
            this.setShowClear();
            this.$emit('focus', event.detail);
        },
        onBlur: function (event) {
            this.focused = false;
            this.setShowClear();
            this.$emit('blur', event.detail);
        },
        onClickIcon: function () {
            this.$emit('click-icon');
        },
        onClickInput: function (event) {
            this.$emit('click-input', event.detail);
        },
        onClear: function () {
            var _this = this;
            this.setData({innerValue: ''});
            this.value = '';
            this.setShowClear();
            utils_1.nextTick(function () {
                _this.emitChange();
                _this.$emit('clear', '');
            });
        },
        onConfirm: function (event) {
            var _a = (event.detail || {}).value,
                value = _a === void 0 ? '' : _a;
            this.value = value;
            this.setShowClear();
            this.$emit('confirm', value);
        },
        setValue: function (value) {
            this.value = value;
            this.setShowClear();
            if (value === '') {
                this.setData({innerValue: ''});
            }
            this.emitChange();
        },
        onLineChange: function (event) {
            this.$emit('linechange', event.detail);
        },
        onKeyboardHeightChange: function (event) {
            this.$emit('keyboardheightchange', event.detail);
        },
        emitChange: function () {
            var _this = this;
            this.setData({value: this.value});
            utils_1.nextTick(function () {
                _this.$emit('input', _this.value);
                _this.$emit('change', _this.value);
            });
        },
        setShowClear: function () {
            var _a = this.data,
                clearable = _a.clearable,
                readonly = _a.readonly;
            var _b = this,
                focused = _b.focused,
                value = _b.value;
            this.setData({
                showClear: !!clearable && !!focused && !!value && !readonly,
            });
        },
        noop: function () {
        },
    },
});
